from usuario import Usuario, db_session
from proyecto import Proyecto
from votosComite import VotosComite
from sqlalchemy import exc
from flask import flash
session = db_session()

class VotosComiteManager(object):
    """Clase encargada del manejo de votos"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<Votos Comite Manager>'
    
    def guardarVoto(self, voto):
        """
        Metodo encargado de almacenar el voto de un integrante del comite en la base de datos
        @param voto: Objeto voto que se desea guardar.
        """
        session.add(voto)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            
            return flash("El voto ya existe", "error")
        else:
            return flash("Voto registrado exitosamente")
        
 
    def eliminarVoto(self, idvoto):
        """
        Metodo encargado de eliminar el voto de un integrante del comite de la base de datos
        @param idvoto: id del voto que se desea eliminar.
        """
#        session = db_session()
        voto = session.query(VotosComite).filter(VotosComite.idvoto==idvoto).first()
        session.delete(voto)
        session.commit()
        
    def getVotoPorUsuario(self, idusuario):
        """
        Metodo encargado de retornar un voto de la base de datos dado el usuario
        @param idusuario: id del usuario cuyo voto se desea obtener.
        """
        voto = session.query(VotosComite).filter(VotosComite.idusuario==idusuario).first()
        return voto
    
    def getVotoPorSolicitud(self, idsolicitud):
        """
        Metodo encargado de retornar un voto de la base de datos dada la solicitud
        @param idsolicitud: id de la solicitud de cambio cuyos votos se desean obtener.
        """
        voto = session.query(VotosComite).filter(VotosComite.idsolicitud==idsolicitud).first()
        return voto
    
    def getVotos(self):
        """Metodo encargado de retornar todos los votos de la base de datos"""
        votos = session.query(VotosComite)
        return votos
    
    def usuarioYaVoto(self, idsolicitud, idusuario):
        """
        Metodo encargado de retornar un voto de la base de datos
        @param idsolicitud: id de la solicitud cuyos votos se desean obtener.
        @param idusuario: id del usuario cuyos votos se desean obtener.
        """
        voto = session.query(VotosComite).filter(VotosComite.idsolicitud==idsolicitud).filter(VotosComite.idintegrante==idusuario).first()
        return voto
    
